﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ArriendoVehiculo.AccesoADatos;

namespace ArriendoVehiculo.LogicaNegocio
{
    class Vehiculo
    {
     
        //ingreso de vehiculos
        public static void IngresarVehiculos(string MARCA, string MODELO,string COLOR, int NROPUERTAS, int CANTIDAD)
        {
            VehiculosEntities bd = new VehiculosEntities();
            Vehiculos vehi = new Vehiculos();
            Marca marca = new Marca();
            Modelo modelo = new Modelo();
            //si ya existe una marca en la base de datos le ingresa su ID
            if (Validaciones.existeMarca(MARCA) != 0)
            {
                vehi.Id_Marca = Validaciones.existeMarca(MARCA);
            }
            else
            {
                //si no le ingreso una nueva marca
                marca.Marca1 = MARCA;
                bd.Marca.Add(marca);
            }
            //igual con modelo
            if (Validaciones.existeModelo(MODELO) != 0)
            {
                vehi.Id_Modelo = Validaciones.existeModelo(MODELO);
            }
            else
            {
                modelo.Modelo1 = MODELO;
                bd.Modelo.Add(modelo);
            }
            vehi.Color = COLOR;
            vehi.Nro_puertas = NROPUERTAS;
            vehi.Cantidad = CANTIDAD;
            bd.Vehiculos.Add(vehi);
            bd.SaveChanges();
        }

        //develueve todos los datos del vehiculo segun los parametros dados
        public Vehiculos recivirVehiculo(string MARCA,string MODELO,string COLOR)
        {
            VehiculosEntities bd = new VehiculosEntities();
            Vehiculos vehi = bd.Vehiculos.FirstOrDefault(p=>p.Marca.Marca1==MARCA&&p.Modelo.Modelo1==MODELO&&p.Color==COLOR);
            return vehi;

        }

        //arriendo de vehiculo
        public void  arrendarAuto(string RUT,string MARCA,string COLOR,string MODELO)
        {
            VehiculosEntities bd = new VehiculosEntities();
              var r =recivirVehiculo(MARCA, MODELO, COLOR);
         //ingreso los datos en la tabla arriendo
            Arriendo arr = new Arriendo();
            arr.Rut = RUT;
            arr.Id_vehiculos = r.Id_vehiculos;
            arr.Id_Marca = r.Id_Marca;
            arr.Id_Modelo = r.Id_Modelo;
            arr.Fecha_Arriendo = DateTime.Now;
            //siempre la fecha de devolucion será 15 dias mas a partir de la fecha actual o sea se arrendará solo 15 dias 
            arr.Fecha_Devolucion = DateTime.Now.AddDays(15);
            arr.Estado = "No Entregado";
            bd.Arriendo.Add(arr);
            bd.SaveChanges();
        }
        //Elimino el registro de arriedo cuando el vehiculos se entrega
        public static void devolucionAuto(string RUT)
        {
            VehiculosEntities bd = new VehiculosEntities();
            Arriendo arr = bd.Arriendo.First(p => p.Rut == RUT);
            bd.Arriendo.Remove(arr);
            bd.SaveChanges();
        }

        //recivo todos los datos de la tabla arriedo segun el rut ingresado
        public static Arriendo recivirArriendo(string RUT)
        {
            VehiculosEntities bd = new VehiculosEntities();
            Arriendo arr = bd.Arriendo.FirstOrDefault(p => p.Rut == RUT);
            return arr;
        }

        //busco que clientes tienen arredado el vehiculo buscado (trae todos los registros de la tabla arriedos)
        public static string recivirArriendoCliente(string MARCA,string MODELO,string COLOR)
        {
            string cadena = "";
            VehiculosEntities bd = new VehiculosEntities();

            var clientes =

                (from c in bd.Arriendo

                 where c.Vehiculos.Marca.Marca1==MARCA&&c.Vehiculos.Modelo.Modelo1==MODELO&&c.Vehiculos.Color==COLOR

                 select c);

            foreach (var c in clientes)
            {

                cadena = cadena +"Rut: "+ c.Rut +"   Apellido: "+c.Cliente.Apellido+ "\r\n"; 
            }
            return cadena;
        }

        //elimina vehiculos
        public bool EliminarVehiculos(int codigo)
        {
            VehiculosEntities bd = new VehiculosEntities();
            Vehiculos pro = bd.Vehiculos.FirstOrDefault(p => p.Id_vehiculos == codigo);
            bd.Vehiculos.Remove(pro);
            try
            {
                bd.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }
        //editar
        public static void EditarVehiculo(int codigo,int NROPUERTAS,int CANTIDAD)
        {
            VehiculosEntities bd = new VehiculosEntities();
            Vehiculos pro = bd.Vehiculos.FirstOrDefault(p => p.Id_vehiculos == codigo);
            pro.Nro_puertas = NROPUERTAS;
            pro.Cantidad = CANTIDAD;
            bd.SaveChanges();
        }


    }
}
